home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-03
/
qbasicpg.zip
/
VIDEO.BAS
< prev
next >
Wrap
BASIC Source File
|
1989-08-31
|
13KB
|
325 lines
' VIDEO.BAS
' This is a simple database program that tracks a home video collection
' with a sequential file and a number of general purpose subprograms.
DECLARE SUB DisplayHeader () ' declare subprograms
DECLARE SUB GetMenuSelection (choice%)
DECLARE SUB AddRecords ()
DECLARE SUB ViewRecords ()
DECLARE SUB PrintRecords ()
DECLARE SUB Search ()
DECLARE SUB ChangeFilename ()
COMMON SHARED filename$, tmp$ ' declare global variables
filename$ = "VIDEO.DB" ' default database filename
OPEN filename$ FOR APPEND AS #1: CLOSE #1 ' ensure that file exists
tmp$ = "Year: #### Type: \ \ Medium: \ \"
DisplayHeader ' call sub to set up screen
DO
GetMenuSelection choice% ' call sub to get menu choice
SELECT CASE choice% ' process menu choice
CASE 1 ' "1" means add to database
LOCATE 3, 47: PRINT "ADD " ' change mode to ADD
AddRecords ' call sub to add items
CASE 2 ' "2" means view database
LOCATE 3, 47: PRINT "VIEW " ' change mode to VIEW
ViewRecords ' call sub to view items
CASE 3 ' "3" means print database
LOCATE 3, 47: PRINT "PRINT " ' change mode to PRINT
PrintRecords ' call sub to print
CASE 4 ' "4" means search database
LOCATE 3, 47: PRINT "SEARCH" ' change mode to SEARCH
Search ' call sub to search
CASE 5 ' "5" means change filename
LOCATE 3, 47: PRINT "CHANGE" ' change mode to CHANGE
ChangeFilename ' call sub to change it
CASE 6 ' "6" means exit to DOS
CLS ' clear screen
SHELL ' exit to DOS shell
DisplayHeader ' set up screen on return
CASE 7 ' "7" means quit program
LOCATE 3, 47: PRINT "QUIT " ' change mode to QUIT
END SELECT
LOOP UNTIL (choice% = 7) ' repeat loop until QUIT chosen
END
SUB AddRecords
' The AddRecords subprogram adds new video items to the database.
LOCATE 25, 1 ' print message on status line
PRINT "Enter video data. Type END for title to quit...";
VIEW PRINT 5 TO 23 ' enable viewport (lines 5-23)
PRINT ' prompt for data
PRINT "Enter new video information (without commas)"
PRINT
OPEN filename$ FOR APPEND AS #1 ' open database in append mode
' get records for file until user enters END for title
WHILE (UCASE$(title$) <> "END")
INPUT "Item title: ", title$ ' get item title
IF (UCASE$(title$) <> "END") THEN ' ...and other video info
INPUT " Significant actors/contributors: ", actor$
INPUT " Year released: ", year%
INPUT " Type of video: ", type$
INPUT " Item medium type: ", medium$
PRINT
' write record to database file
WRITE #1, title$, actor$, year%, type$, medium$
END IF
WEND
CLOSE #1 ' close file when finished
END SUB
SUB ChangeFilename
' The ChangeFilename subprogram changes the name of the current
' database file. If the new file does not exist, it is created.
' If no filename is specified, the default value of VIDEO.DB is
' assumed. Note: This subprogram does only minimal checking
' for a valid DOS filename -- if an invalid name is entered the
' program will terminate.
LOCATE 25, 1: PRINT "Specify new video database filename...";
VIEW PRINT 5 TO 23 ' print message on status line
PRINT ' prompt for a new filename
PRINT "Use this option create a new video database file or open";
PRINT " an existing one."
PRINT
PRINT "The current directory contains the following files:"
PRINT
FILES "*.*" ' display all files in the current
PRINT ' directory to help user
PRINT "What video collection data file would you like to work with?"
PRINT "(Press Enter for default database file VIDEO.DB)"
PRINT
INPUT "Filename: ", filename$ ' assign input to global variable
IF (filename$ = "") THEN ' if no filename entered then
filename$ = "VIDEO.DB" ' set filename to VIDEO.DB
ELSE ' otherwise trim blank spaces off
filename$ = LTRIM$(RTRIM$(UCASE$(filename$)))
END IF ' both ends of file and change to
' uppercase
OPEN filename$ FOR APPEND AS #1 ' open and close file to ensure it
CLOSE #1 ' exists on disk (this avoids file
' error when opening in INPUT mode)
END SUB
SUB DisplayHeader
' The DisplayHeader subprogram displays the status information on the
' first three lines of the screen and the two dividing lines that set
' off program information window.
CLS ' clear screen
COLOR 9 ' set color to light blue
PRINT " V I D E O C O L L E C T I O N"
PRINT
PRINT "Current file: "; ' display status fields
PRINT "Current mode: ";
PRINT "Current time:"
PRINT STRING$(80, "-") ' print dividing lines
LOCATE 24, 1: PRINT STRING$(80, "-"); ' on lines 4 and 24
COLOR 7 ' set color to default white
END SUB
SUB GetMenuSelection (choice%)
' The GetMenuSelection subprogram gets a menu choice from the user
' and returns it to the main program in the choice% variable.
' The VIEW PRINT statement is used to enable and disable the
' viewport area (lines 5-23). The information displayed here does
' not disturb the data in lines 1 through 4 and 24 through 25.
choice% = 0 ' initialize choice% to zero
VIEW PRINT ' disable viewport to update lines 3 and 25
LOCATE 3, 16: PRINT " ": LOCATE 3, 16: PRINT filename$
LOCATE 3, 47: PRINT "SELECT" ' set current mode to select
LOCATE 3, 76: PRINT LEFT$(TIME$, 5) ' update current time
LOCATE 25, 1: PRINT "Type a number between 1 and 7 and press Enter...";
VIEW PRINT 5 TO 23 ' enable viewport (lines 5-23)
CLS 2 ' clear viewport for choice prompts
PRINT ' prompt user for choice
PRINT "SELECT an option:"
PRINT
PRINT " 1) ADD entries to video database and save on disk"
PRINT " 2) VIEW contents of video database on screen"
PRINT " 3) PRINT video database on system printer"
PRINT " 4) SEARCH for a specific entry in video database"
PRINT " 5) CHANGE video database filename"
PRINT " 6) EXIT temporarily to DOS (type 'exit' to return)"
PRINT " 7) QUIT video database program"
PRINT
' choice must be integer between 1 and 7
DO WHILE (choice% < 1) OR (choice% > 7)
INPUT "Choice (1-7): ", choice%
LOOP
CLS 2 ' clear viewport for upcoming choice
VIEW PRINT ' disable viewport to clear status line
LOCATE 25, 1: PRINT STRING$(80, " "); ' print a blank line
END SUB
SUB PrintRecords
' The PrintRecords subprogram sends the entire contents of the current
' database file to the printer.
VIEW PRINT 5 TO 23 ' enable viewport (lines 5-23)
PRINT ' display introductory message
PRINT "This option sends the contents of "; filename$;
PRINT " to your printer."
VIEW PRINT ' disable viewport so status
LOCATE 25, 1 ' line can be updated
INPUT ; "Type P to print or R to return to main menu: ", reply$
VIEW PRINT 5 TO 23 ' enable viewport (lines 5-23)
' if user wants to print (P or p)
IF (reply$ = "P") OR (reply$ = "p") THEN
OPEN filename$ FOR INPUT AS #1 ' open the video database file
' send header to printer
LPRINT "------------------- Video Collection -------------------"
LPRINT
LPRINT "Date printed: "; DATE$ ' print current date
LPRINT "Filename: "; filename$ ' print current filename
LPRINT
LPRINT "Collection contents:"
LPRINT
' until file contents exhausted
DO WHILE (NOT EOF(1)) ' read a record from file
INPUT #1, title$, actor$, year%, type$, medium$
LPRINT "Title: "; title$ ' print each field of the record
LPRINT "Actors: "; actor$
LPRINT "Year: "; year%
LPRINT "Type: "; type$
LPRINT "Medium: "; medium$
LPRINT
LOOP
LPRINT CHR$(12) ' send formfeed character to printer
CLOSE #1 ' close file
END IF
END SUB
SUB Search
' The Search subprogram searches the entire database file for records
' matching a search string entered by the user. Search currently
' supports searches for title and actor fields--additional topics
' can be included by adding extra CASE statements.
num% = 0 ' initialize catagory variable
found% = 0 ' initialize "record found" flag
LOCATE 25, 1 ' update status line
PRINT "Enter search category and content...";
VIEW PRINT 5 TO 23 ' enable viewport (lines 5-23)
PRINT
PRINT "Select a search category:" ' prompt for search topic
PRINT
PRINT " 1) Search for title"
PRINT " 2) Search for actors/contributors"
PRINT
DO WHILE (num% < 1) OR (num% > 2) ' get number associated with
INPUT "Category (1-2): ", num% ' search topic
LOOP
PRINT ' get search string
INPUT "Enter string to be searched for: ", searchStr$
PRINT
PRINT "Search results:" ' display search results
PRINT
OPEN filename$ FOR INPUT AS #1 ' open database file
DO WHILE (NOT EOF(1)) ' read records from file
INPUT #1, title$, actor$, year%, type$, medium$
SELECT CASE num% ' use num% to compare correct record field...
CASE 1 ' if num% = 1, determine if search string in title field
IF INSTR(UCASE$(title$), UCASE$(searchStr$)) THEN
found% = -1 ' if so, set found flag to true
COLOR 2: PRINT "Title: "; title$: COLOR 7
PRINT "Actors: "; actor$
PRINT USING tmp$; year%; type$; medium$
PRINT ' display record fields with title field in green
END IF
CASE 2 ' if num% = 2, determine if search string in actor field
IF INSTR(UCASE$(actor$), UCASE$(searchStr$)) THEN
found% = -1 ' if so, set found flag to true
PRINT "Title: "; title$
COLOR 2: PRINT "Actors: "; actor$: COLOR 7
PRINT USING tmp$; year%; type$; medium$
PRINT ' display record fields with title field in green
END IF
END SELECT
LOOP
CLOSE #1 ' close file
IF (NOT found%) THEN ' if file not found display
COLOR 2: PRINT searchStr$; ' "not found" message
COLOR 7: PRINT " not found in "; filename$; " database"
END IF
VIEW PRINT ' disable viewport and update status line
LOCATE 25, 1: INPUT ; "Press Enter to return to main menu...", dummy$
END SUB
SUB ViewRecords
' The ViewRecords subprogram displays each record in the database on
' the screen one at a time.
LOCATE 25, 1 ' update status line
PRINT "Press Enter to continue...";
VIEW PRINT 5 TO 23 ' enable viewport (lines 5-23)
PRINT ' display opening message
PRINT "This option lets you view your video collection ";
PRINT "one record at at time."
PRINT
OPEN filename$ FOR INPUT AS #1 ' open database file
DO WHILE (NOT EOF(1)) ' get record from file
INPUT #1, title$, actor$, year%, type$, medium$
PRINT "Title: "; title$ ' display each field on screen
PRINT "Actors: "; actor$
PRINT USING tmp$; year%; type$; medium$
INPUT "", dummy$ ' pause after each record
LOOP
CLOSE #1 ' close file
PRINT "** End of file reached **" ' display EOF message
INPUT "", dummy$ ' pause before returning to
' to main program
END SUB